/** ==================================================================================== **/
/** 							Definizione dei servizi di Report Batch  					 **/
/** ==================================================================================== **/

/**
 * Per utilizzare i metodi pubblici del service è necessario iniettare nei propri service e/o controller la classe "ReportBatchService".
 */
BootApplication.service('ReportBatchService', [ 'log', '$http', 'configuration', '$q', "$translate",
                                             function( log, $http, appConstants, $q, $translate ) {

	/**
	 * Servizio per il recupero dei report associati alla funzionalità implementata
	 * 
	 * In base al codice della funzionalità che si sta implementando, recupera tutti i report disponibili
	 * 
	 * @param {@link String} codiceFunzionalita - Stringa da splittare contenente i codici delle funzionalità a cui sono associati i report da recuperare
	 * 
	 * @return
	 * @throws Exception
	 */
	this.getElencoReports = function(codiceFunzionalita) {
		try{
		
			var requestData = new Object();
			if(angular.isDefined(codiceFunzionalita) && codiceFunzionalita != null && codiceFunzionalita.length>0){
				var listaCodiciFunzionalita = codiceFunzionalita.split(",");
				requestData.listaCodiciFunzionalita = listaCodiciFunzionalita;
			}
			
			var deferred = $q.defer();
			
			$http({
				
			   method: 'POST',
			   url: appConstants.getParam("Constants").URL_SEARCH_REPORT,
			   data: angular.toJson(requestData),
			   responseType: "json",
			   cache: false,
			})
			.success(function(data, status, headers, config) {
				
				deferred.resolve(data);
			})
			.error(function(data, status, headers, config) {
				/* */
				log.error("ReportBatchService: getElencoReports ---> " + ((angular.isDefined(data) && data != null ) ? angular.toJson(data) : data));
					
				deferred.reject(data);
			});
			
			return deferred.promise;
		}catch(e){
			/* */
			log.error("ReportBatchService: getElencoReports ---> " + e);
		}
	 }// close getElencoReports
	
	
	/**
	 * Servizio per il salvataggio della configurazione di un report
	 * 
	 * 
	 * @param {@link Long} report - Oggetto contenente i dati del report
	 * @param {@link Long} cronTabExpression - Eventuale schedulazione del report
	 * @param {@link Long} inputParameter - Eventuali parametri di ingressi al report
	 * @param {@link List<String>} listaFormati - Elenco dei formati in cui generare il report
	 *
	 * 
	 * @return
	 * @throws Exception
	 */
	this.saveReportConfiguration = function(report, cronTabExpression, inputParameter, listaFormati) {
		try{
		
			var requestData = new Object();
			requestData.idReport = report.idReport;
			requestData.descrizione = report.descrizione;
			requestData.schedulabile = report.schedulabile;
			requestData.path = report.path;
			requestData.scheduleExpression = cronTabExpression;
			requestData.parametriTemplate = (inputParameter == null || typeof Object.keys(inputParameter)[0] === 'undefined') ? null : JSON.stringify(inputParameter);
			requestData.listaFormati  = (listaFormati == null || listaFormati.length == 0) ? ["PDF"] : listaFormati;
			
			var deferred = $q.defer();
			
			$http({
				
			   method: 'POST',
			   url: appConstants.getParam("Constants").URL_INSERT_REPORT_CONFIGURATION,
			   data: angular.toJson(requestData),
			   responseType: "json",
			   cache: false,
			})
			.success(function(data, status, headers, config) {
				
				deferred.resolve(data);
			})
			.error(function(data, status, headers, config) {
				/* */
				log.error("ReportBatchService: saveReportConfiguration ---> " + ((angular.isDefined(data) && data != null ) ? angular.toJson(data) : data));
					
				deferred.reject(data);
			});
			
			return deferred.promise;
		}catch(e){
			/* */
			log.error("ReportBatchService: saveReportConfiguration ---> " + e);
		}
	 }// close getReports
	
	
	this.getDettaglioReportConfiguration = function(idReportConfiguration) {
		try{
		
			var requestData = new Object();
			requestData.idReportConfiguration = idReportConfiguration;
			
			var deferred = $q.defer();
			
			$http({
				
			   method: 'POST',
			   url: appConstants.getParam("Constants").URL_SEARCH_CONFIGURATION_REPORT,
			   data: angular.toJson(requestData),
			   responseType: "json",
			   cache: false,
			})
			.success(function(data, status, headers, config) {
				
				deferred.resolve(data);
			})
			.error(function(data, status, headers, config) {
				/* */
				log.error("ReportBatchService: getDettaglioReportConfiguration ---> " + ((angular.isDefined(data) && data != null ) ? angular.toJson(data) : data));
					
				deferred.reject(data);
			});
			
			return deferred.promise;
		}catch(e){
			/* */
			log.error("ReportBatchService: getDettaglioReportConfiguration ---> " + e);
		}
	 }// close getElencoReport
}]);